package com.papercutting.platform.service;

import com.papercutting.platform.entity.UserFavorite;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 用户收藏服务接口
 */
public interface UserFavoriteService {
    
    /**
     * 保存收藏记录
     */
    UserFavorite save(UserFavorite userFavorite);
    
    /**
     * 根据ID查找收藏记录
     */
    UserFavorite findById(Long id);
    
    /**
     * 查找所有收藏记录
     */
    List<UserFavorite> findAll();
    
    /**
     * 分页查找收藏记录
     */
    Page<UserFavorite> findAll(Pageable pageable);
    
    /**
     * 根据ID删除收藏记录
     */
    void deleteById(Long id);
    
    /**
     * 根据用户ID查找收藏记录
     */
    List<UserFavorite> findByUserId(Long userId);
    
    /**
     * 根据目标类型和目标ID查找收藏记录
     */
    List<UserFavorite> findByTargetTypeAndTargetId(String targetType, Long targetId);
    
    /**
     * 根据用户ID、目标类型和目标ID查找收藏记录
     */
    UserFavorite findByUserIdAndTargetTypeAndTargetId(Long userId, String targetType, Long targetId);
    
    /**
     * 根据用户ID和目标类型查找收藏记录
     */
    List<UserFavorite> findByUserIdAndTargetType(Long userId, String targetType);
    
    /**
     * 切换收藏状态
     */
    boolean toggleFavorite(Long userId, String targetType, Long targetId);
}